package com.Algorithm.HUAWEI.two20220303;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.Buffer;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: zjz
 * @Date: 2022/03/21/10:27
 * @Description:
 * @Target:
 */
public class 整数与IP地址间的转换 {
    /*
    * 描述
        原理：ip地址的每段可以看成是一个0-255的整数，把每段拆分成一个二进制形式组合起来，然后把这个二进制数转变成
        一个长整数。
        举例：一个ip地址为10.0.3.193
        每段数字             相对应的二进制数
        10                   00001010
        0                    00000000
        3                    00000011
        193                  11000001

        组合起来即为：00001010 00000000 00000011 11000001,转换为10进制数就是：167773121，即该IP地址转换后的数字就是它了。

        数据范围：保证输入的是合法的 IP 序列

        输入描述：
        输入
        1 输入IP地址
        2 输入10进制型的IP地址

        输出描述：
        输出
        1 输出转换成10进制的IP地址
        2 输出转换后的IP地址

        示例1
        * 输入：
        10.0.3.193
        167969729
        输出：
        167773121
        10.3.3.193

    *
    *
    * */


    public static void main(String[] args) throws IOException {
        // 先回忆下10-2,2-10
        // 10-2

        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String s1 = in.readLine();
        String s2 = in.readLine();


        System.out.println(IpToDec(s1));
        System.out.println(DecToIp(s2));



    }


    static String DecToIp(String ss){
        String s = addZero(Long.toBinaryString(Long.valueOf(ss)));
        System.out.println(s);
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append(getDecimalByBinary(s.substring(0,8)));
        stringBuffer.append(".");
        stringBuffer.append(getDecimalByBinary(s.substring(8,16)));
        stringBuffer.append(".");
        stringBuffer.append(getDecimalByBinary(s.substring(16,24)));
        stringBuffer.append(".");
        stringBuffer.append(getDecimalByBinary(s.substring(24,32)));

        return stringBuffer.toString();
    }
    static String IpToDec(String ss){
        StringBuffer stringBuffer = new StringBuffer();
        String[] split = ss.split("\\.");

        stringBuffer.append(addZero(Integer.toBinaryString(Integer.valueOf(split[0]))));
        stringBuffer.append(addZero(Integer.toBinaryString(Integer.valueOf(split[1]))));
        stringBuffer.append(addZero(Integer.toBinaryString(Integer.valueOf(split[2]))));
        stringBuffer.append(addZero(Integer.toBinaryString(Integer.valueOf(split[3]))));




        return  getDecimalByBinary(stringBuffer.toString());
    }


    static String getDecimalByBinary(String ss){
        long sum = 0L;
        int index = 0;
        for (int i = ss.length()-1; i >= 0; i--) {
            sum+= (ss.charAt(i)-'0')*Math.pow(2,index++);
        }
        return sum+"";
    }


    // 不足8，前面补0
    static String addZero(String ss){
        int len = ss.length();
        if (ss.length()>=32){
            return ss;
        }
        if (ss.length()>8&&ss.length()<32){
           len = ss.length()%8;
        }
        StringBuffer tempString = new StringBuffer();
        for (int i = 0; i < (8-len); i++) {
            tempString.append("0");
        }

        tempString.append(ss);
        return tempString.toString();
    }


}
